<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>函数类型</title>
    <script>
        function f1() {
            // 先执行fn方法,将fn方法的返回值赋值给变量s
            let s = fn();
            // 如果对应函数没有返回值,则表示声明了变量但是尚未赋值
            console.log(s)
        }

        function fn() {
            // 在函数中,不需要返回值类型
            // 但是可以有返回值
            // 可以通过return 值的方式表示函数的返回值
            return "admin";
        }

        // 在调用函数的时候,传递的实际参数与生命函数的时候定义的形式参数无关
        // 在js中存在一个内置对象arguments,这是一个数组,是用于获取调用函数时传递的实参的
        // 而声明函数时的参数列表仅仅只是获取了arguments中的值
        function sum(i, j) {
            // 此时参数i相当于做了let i = arguments[0]
            // let j = arguments[1]
            // console.log(i+j)
            // return i + j;
            // let sum = arguments[0]+arguments[1]
            // console.log(sum);
            // return sum;

            let sum = 0;
            for (let i = 0; i < arguments.length; i++) {
                sum += arguments[i];
            }
            console.log(sum);
            return sum;
        }

        function fn1() {
            // 将fn函数作为变量的值赋值给变量s
            let s = fn;
            console.log(typeof fn)
            s();
        }

        function fn2() {
            let s = function () {
                alert("这是匿名函数");
            }
            console.log(typeof s)
            alert(s)
            s();
        }

        function fn3() {
            // ES6引入了Lambda表达式
            let s = () => alert("这是Lambda表达式");
            console.log(typeof s);
            s();
            // let s2 = function(){
            //     return "admin";
            // }
            let s2 = () => "admin";
            console.log(s2());
        }
    </script>
</head>
<body>
<button onclick="f1()">函数类型</button>
<br>
<button onclick="sum(1,2,3,4,5,6)">求和</button>
<br>
<button onclick="fn1()">函数定义方式一</button>
<br>
<button onclick="fn2()">函数定义方式二</button>
<br>
<button onclick="fn3()">函数定义方式三</button>
<br>
</body>
</html>